package Day021_反射_注解.demo13_完成MyTest注解案例;

import java.lang.reflect.Method;

/**
 * @Author：pengzhilin
 * @Date: 2020/5/14 15:55
 */
public class MainTest {

    // 模拟: JUnit框架中执行代码 解析 @Test
    public static void main(String[] args) throws Exception {
        /*
            完成注解的MyTest案例:
                需求:
                	在一个类(测试类,TestDemo)中有三个方法,其中两个方法上有@MyTest,另一个没有.
                	还有一个主测试类(MainTest)中有一个main方法.
                	在main方法中,让TestDemo类中含有@MyTest方法执行.   自定义@MyTest, 模拟单元测试.
         */
        // 1.得到TestDemo的Class对象
        Class<?> c = Class.forName("com.itheima.demo13_完成MyTest注解案例.TestDemo");

        // 2.获取TestDemo类中的所有方法的Method对象
        Method[] methodArr = c.getDeclaredMethods();

        // 3.循环遍历所有的Method对象
        for (Method method : methodArr) {
            // 4.在循环中,判断遍历出来的方法上面是否有@MyTest注解
            boolean res = method.isAnnotationPresent(MyTest.class);
            // 5.如果判断后,该方法有@MyTest注解,就执行该方法
            if (res == true){
                Object obj = c.newInstance();
                method.invoke(obj);
            }
        }

    }
}
